package cn.learn.designpattern.facade;

/**
 * 外观模式
 * <p>
 * 外观模式，有称为门面模式，
 * 对外：定义一个高级接口，使这个接口更简单，调用这个接口，不需要知道内部的业务逻辑
 * 对内：复杂的功能，多个系统方法、系统间业务调用自己做好
 *
 * @author huangyezhan
 * @version 1.0
 * @date 2021年07月11日13:26
 */
public class FacadePattern {

    public static void main(String[] args) {
        Facade f = new Facade();
        f.method();
    }

}

/**
 * 外观角色
 */
class Facade {
    private SubSystem01 obj1 = new SubSystem01();
    private SubSystem02 obj2 = new SubSystem02();
    private SubSystem03 obj3 = new SubSystem03();

    public void method() {
        obj1.method1();
        obj2.method2();
        obj3.method3();
    }
}

/**
 * 子系统角色
 */
class SubSystem01 {
    public void method1() {
        System.out.println("子系统01的method1()被调用！");
    }
}

/**
 * 子系统角色
 */
class SubSystem02 {
    public void method2() {
        System.out.println("子系统02的method2()被调用！");
    }
}

/**
 * 子系统角色
 */
class SubSystem03 {
    public void method3() {
        System.out.println("子系统03的method3()被调用！");
    }
}